<?php

Class FilterController{

    private static $_instance;
    
    private $_controller;
    private $_action;


    /**
     * Constructor que define el controlador y la accion  que se ejecutaran
     */
    public function  __construct() {
        $this->_controller = $this->getController();
        $this->_action = $this->getAction();
    }

    /**
     * Retorna una instancia de la clase (crea la instancia solo una vez, luego devuelve la ya creada para no ocupar memoria)
     * @return Class_FrontController
     */
    public static function getInstance(){
        if(!isset(self::$_instance)){
            self::$_instance = new self();
        }
        else
            self::$_instance->__construct();
        
        return self::$_instance;
    }

    /**
     * Retorna el nombre de la clase controladora
     * @return string
     */
    public function getController(){
        if(!is_null($_GET['controller']))
            $controller = 'Application_Controllers_'.$_GET['controller'].'Controller';
        else
            $controller = 'Application_Controllers_IndexController';
        
        return $controller;
    }

    /**
     * Retorna la accion a ejecutar de la clase controladora
     * @return string 
     */
    public function getAction(){
        if(!is_null($_GET['action']))
            $action = $_GET['action'];
        else
            $action = 'showLogin';
        
        return $action;
    }

    /**
     * Rutea la direccion URL, es decir crea una instancia de la clase controladora
     * y le pasa la accion como parametro
     */
    public function route(){
        if(class_exists($this->_controller))
            $objController = new $this->_controller($this->_action);
        else
            die('Undefined: ' + $this->_controller);
    }
}
